package basics

import (
	"fmt"
	"reflect"
)

func EnumValue() {
	// 利用iota标识符标识符实现从0开始递增的枚举
	// 在同一个常量组中,iota从0开始递增, 每一行递增1
	// 在同一个常量组中,只要上一行出现了iota,那么后续行就会自动递增
	const (
		zero   = iota
		first  = iota
		second     // 这里会自动递增
		six    = 6 // 这里被中断, 如果没有显示恢复, 那么下面没有赋值的常量都和上一行一样
		sixth
		five, fifth = iota, iota
	)
	fmt.Println("zero = ", zero)     // 0
	fmt.Println("first = ", first)   // 1
	fmt.Println("second = ", second) // 2
	fmt.Println("six = ", six)       // 6
	fmt.Println("sixth = ", sixth)   // 6
	fmt.Println("five = ", five)     // 5
	fmt.Println("fifth = ", fifth)   // 5

	const (
		male float32 = iota // 显示指定类型,后续自增都会按照指定类型自增
		female
		yao
	)
	fmt.Printf("%f\n", male)                       // 0.0
	fmt.Printf("%f\n", female)                     // 1.0
	fmt.Printf("%f\n", yao)                        // 2.0
	fmt.Println("male = ", reflect.TypeOf(female)) // float32
}
